<?php
declare (strict_types = 1);

namespace app\middleware;

// 引用User模型
use app\model\User;
use think\facade\View;

class Auth
{
    use \liliuwei\think\Jump; 

    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {   
        // 获取cookie
        $LoginUser = !empty(cookie('LoginUser')) ? cookie('LoginUser') : '';

        // json字符串转成数组
        $LoginUser = json_decode($LoginUser,true);

        // 实例化User模型
        $UserModel = new User();

        // 如果cookie为空
        if(empty($LoginUser))
        {
            // 如果条件成立就去登录页面
            $this->error('请先登录','/index/login');
            halt();
        }else{
            $userid = !empty($LoginUser['id']) ? $LoginUser['id'] : 0;

            $User = $UserModel->find($userid);

            if(!$User)
            {
                //session属于伪造的
                cookie('LoginUser', null);
                $this->error('非法登录', '/index/login');
                halt();
            }

            // 数组转json字符串
            $LoginData = json_encode($User);


            cookie('LoginUser',$LoginData);

            // 把登录的信息赋值给所有控制器
            $request->LoginUser = $User;

            // 把登录的信息赋值给所有视图
            View::assign(['LoginUser' => $User]);
        }

        // 返回Request对象
        return $next($request);

    }
}
